package me.keiwu.pub.service;

import java.util.Map;

import com.fasterxml.jackson.databind.deser.std.StringArrayDeserializer;
import com.netflix.hystrix.util.LongAdder;

import me.keiwu.pub.data.ResponseV2;
import me.keiwu.pub.data.wx.WXSessionData;
import me.keiwu.pub.data.wx.WXTemplateData;

/**
 * Created by kei on 27/05/2017.
 */
public interface WXService {

	WXSessionData getSession(String code);

	boolean checkData(String data, String signature, String sessionKey);

	String decryptData(String encryptedData, String iv, String sessionKey);

	<T> T decryptData(String encryptedData, String iv, String sessionKey, Class<T> clazz);

	/**
	 * 发送模板消息
	 * 
	 * @param selfId
	 *            用户自己的ID
	 * @param otherId
	 *            对方用户的ID
	 * @param type
	 *            模板类型 0.表示 挑战邀请（好友接受挑战通知）1.表示 挑战结果 2.表示 用户5天没有登录，发送通知 3.表示
	 *            账户变动提醒 4.表示 留言回复通知 5.表示 比赛邀请通知
	 * @param otherMap
	 *            一些其他的参数集合。比如，挖了多少钱，邀请比赛的名称等等。
	 * @param page
	 *            点击模板跳转的页面，不写则不跳转
	 * @return 返回结果 发送是否成功
	 */
//	boolean sendTemplateMsg(Long selfId, Long otherId, int type, Map<String, Object> otherMap, String page);

	/**
	 * @param fromUserJsonStr UserBean的Json字符串，模板消息的发起方，例如A挖了B的金币，发起方就是A，可以为空
	 * @param toUserJsonStr UserBean的Json字符串，模板消息的接收方
	 * @param page 			需要跳转的页面
	 * @param paramMap 附加参数列表，在不同的模板消息类型会有变化
	 *                 固定参数:	templateMsgType int			消息类型
	 *                 			formId			string		formId
	 *                 可选参数:	goldCount		int			金币数
	 *                 			challengeName	String		挑战名称
	 *                 			endTime			String		挑战结束时间
	 *
	 * @return 模板消息
	 */
	ResponseV2 sendTemplateMsg(String fromUserJsonStr, String toUserJsonStr, String page, Map<String, Object> paramMap);
}
